﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SIIE_ERP.Codigo;


namespace SIIE_ERP.BaseDatos.Bancos
{
    public class dbo_Trans_Conciliacion
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion

        #region Constructores

        public dbo_Trans_Conciliacion(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion

        public DataTable Get_Conciliaciones()
        {
            string Query = @"SELECT A1.*, A2.Nombre as Desc_CuentaOrigen, A3.Nombre as Desc_CuentaDestino, A4.Nombre as Desc_Moneda FROM 
                            (((      
                                    dbo_Trans_Conciliacion as A1 LEFT JOIN
                                            dbo_Cat_Cuenta_Bancaria as A2 ON A1.Id_Cuenta_Origen = A2.Id_Cuenta)
                                    LEFT JOIN dbo_Cat_Cuenta_Bancaria as A3 ON A1.Id_Cuenta_Destino = A3.Id_Cuenta)
                                    INNER JOIN dbo_Cat_Moneda as A4 ON A1.Id_Moneda = A4.Id_Moneda
                            )
                            WHERE A1.RFC = '@@RFC' ORDER BY Id_Conciliacion DESC";

            Query = Query.Replace("@@RFC", this._RFC);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Conciliaciones_Por_Id(Int32 Id)
        {
            string Query = @"SELECT A1.*, A2.Nombre as Desc_CuentaOrigen, A3.Nombre as Desc_CuentaDestino, A4.Nombre as Desc_Moneda FROM 
                            (((      
                                    dbo_Trans_Conciliacion as A1 LEFT JOIN
                                            dbo_Cat_Cuenta_Bancaria as A2 ON A1.Id_Cuenta_Origen = A2.Id_Cuenta)
                                    LEFT JOIN dbo_Cat_Cuenta_Bancaria as A3 ON A1.Id_Cuenta_Destino = A3.Id_Cuenta)
                                    INNER JOIN dbo_Cat_Moneda as A4 ON A1.Id_Moneda = A4.Id_Moneda
                            )
                            WHERE A1.RFC = '@@RFC' AND Id_Conciliacion = @@Id";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id", Id.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }


        public Respuesta Insert_Transaccion_Bancaria(
            string IdCuentaOrigen,
            string IdCuentaDestino,
            string IdMovimientoBancario,
            string IdMoneda,
            string Importe,
            string Notas
        )
        {
            if (IdCuentaDestino.Length == 0) IdCuentaDestino = "NULL";
            if (IdMovimientoBancario.Length == 0) IdMovimientoBancario = "1";


            string Query = @"INSERT INTO dbo_Trans_Conciliacion (
                                Id_Conciliacion,
                                RFC,
                                Secuencia,
                                Estatus,
                                Fecha_Transaccion,
                                Id_Cuenta_Origen,
                                Id_Cuenta_Destino,
                                Id_MovimientoBank,
                                Id_Moneda,
                                Importe,
                                Notas,
                                Fecha_Alta,
                                Usuario_Alta,
                                Fecha_Mantto,
                                Usuario_Mantto
                            )VALUES(
                                IIF(DCount('*', 'dbo_Trans_Conciliacion') = 0, 1, DMax('Id_Conciliacion', 'dbo_Trans_Conciliacion') + 1),
                                '@@RFC',
                                IIF(DCount('*', 'dbo_Trans_Conciliacion', ""RFC = '@@RFC'"") = 0, 1, DMax('Id_Conciliacion', 'dbo_Trans_Conciliacion', ""RFC = '@@RFC'"") + 1),

                                @@Estatus,
                                NOW(),
                                @@Id_Cuenta_Origen,
                                @@Id_Cuenta_Destino,
                                @@Id_MovimientoBank,
                                @@Id_Moneda,
                                @@Importe,
                                '@@Notas',
                                NOW(),
                                '@@Usuario',
                                NOW(),
                                '@@Usuario'
                            )
                            ";

            Query = Query.Replace("@@RFC", this._RFC);

            Query = Query.Replace("@@Estatus", EstatusDocs_Id.Estatus_Doc_Cargado.GetHashCode().ToString());
            Query = Query.Replace("@@Id_Cuenta_Origen", IdCuentaOrigen);
            Query = Query.Replace("@@Id_Cuenta_Destino", IdCuentaDestino);
            Query = Query.Replace("@@Id_MovimientoBank", IdMovimientoBancario);
            Query = Query.Replace("@@Id_Moneda", IdMoneda);
            Query = Query.Replace("@@Importe", Importe);
            Query = Query.Replace("@@Notas", Notas);

            Query = Query.Replace("@@Usuario", this._Usuario);

            return SrvDB.ExecuteQuery_Insert(Query);
        }

        public Respuesta Update_Notas(
            int IdConciliacion,
            string Notas
            )
        {
            string Query = @"UPDATE dbo_Trans_Conciliacion SET Notas = '@@Notas' WHERE Id_Conciliacion = @@Id";

            Query = Query.Replace("@@Notas", Notas);
            Query = Query.Replace("@@Id", IdConciliacion.ToString());

            return SrvDB.ExecuteQuery_Update(Query);
        }

        public Respuesta Update_Estatus(
            int IdConciliacion,
            EstatusDocs_Id Estatus
            )
        {
            string Query = @"UPDATE dbo_Trans_Conciliacion SET Estatus = '@@Estatus' WHERE Id_Conciliacion = @@Id";

            Query = Query.Replace("@@Estatus", Estatus.GetHashCode().ToString());
            Query = Query.Replace("@@Id", IdConciliacion.ToString());

            return SrvDB.ExecuteQuery_Update(Query);
        }
    }
}
